import Vue from 'vue'

import { Message, MessageBox, Loading } from 'element-ui'
import moment from 'moment'
let loadingInstance = ''
const EventBus = new Vue()
export const Util = {
  /**
   * 简单alert
   * title 标题
   * message 内容
   * className 自定义class
   * showCancelButton 是否展示取消按钮
   * confirmButtonText 确认按钮文案
   * cancelButtonText 取消按钮文案
   * confirmButtonColor 确认按钮颜色
   * cancelButtonColor 取消按钮颜色
   * type: success / info / warning / error
   */
  msg: function (options) {
    MessageBox({
      title: options.title || '',
      type: options.type || 'error',
      message: options.message || '',
      className: options.className || '',
      showCancelButton: options.showCancelButton || false,
      confirmButtonText: options.confirmButtonText || '确认',
      cancelButtonText: options.cancelButtonText || '取消',
      confirmButtonColor: options.confirmButtonColor || '#1989fa',
      cancelButtonColor: options.cancelButtonColor || '#000',
      dangerouslyUseHTMLString: true,
      center: options.center || false,
      callback: function (action, done) {
        if (action == 'confirm') {
          if (options.success) {
            options.success(done)
          }
        } else {
          console.log(done)
          //done.close()
        }
      },
    })

    /* Vue.$vux.alert.show({
      title: options.title||'',
      content: options.message||'',
      onShow() {
        options.onShow?(options.onShow)():'';
      },
      onHide() {
        options.onHide?(options.onHide)():'';
      }
    }) */
  },

  /**
   * 提示框
   */
  Info: function (options) {
    Message({
      message: options.message || '提示',
      type: options.type || 'error',
      duration: options.time || 2000,
      onClose: options.onClose || '',
    })
  },

  /**
   * 轻提示
   */
  Tips: function (options) {
    Message({
      message: options.message || '提示',
      duration: options.duration || 3000,
      type: options.type || 'text',
      icon: options.icon || '',
    })
  },

  /**
   * loading
   */
  loading: function (message) {
    loadingInstance = Loading.service({
      text: message || '加载中...',
    })
  },

  /**
   * 关闭loading
   */
  closeLoading: function () {
    loadingInstance.close()
  },

  /**
   * 校验手机号码格式
   */
  checkPhone: function (mobile) {
    let myreg = /^(13[0-9]|15[0-9]|16[0-9]|17[0-9]|18[0-9]|19[0-9]|14[0-9])[0-9]{8}$/
    return myreg.test(mobile)
  },

  /**
   * 校验固定电话
   */
  validationTel: function (tel) {
    let reg = /^0[\d]{2,3}-[\d]{7,8}$/
    return reg.test(tel)
  },

  /**
   * 是否特殊字符
   */
  isSpecialLetter: function (str) {
    let reg = new RegExp(
      "[`~!@#$^&*=|{}':;',\\[\\]<>?~！@#￥……&*——|{}【】‘；：”“'。，、？ ]",
    )
    return reg.test(str)
  },

  /**
   * 获取当前时间
   */
  getCurrentDate: function () {
    let time = new Date()
    let y = time.getFullYear()
    let m = time.getMonth() + 1
    let d = time.getDate()

    return {
      date: y + '/' + m + '/' + d,
    }
  },

  /**
   * 获取浏览器参数
   */
  getUrlParams: function (name) {
    let vars = [],
      hash
    let oParams = {}
    let hashes = window.location.href
      .slice(window.location.href.indexOf('?') + 1)
      .split('&')
    for (let i = 0; i < hashes.length; i++) {
      hash = hashes[i].split('=')
      vars.push(hash[0])
      oParams[hash[0]] = hash[1]
    }
    console.log(vars)
    if (name) {
      return oParams[name]
    } else {
      return oParams
    }
  },

  /**
   * 根据当前时间，计算往后30天的日期
   */
  getAfterDate: function (day) {
    let date1 = new Date()
    let date2 = new Date(date1)
    let time = 30
    if (day) {
      time = day
    }
    date2.setDate(date1.getDate() + time)

    let _date =
      date2.getFullYear() + '-' + (date2.getMonth() + 1) + '-' + date2.getDate()

    return {
      date: _date,
      year: date2.getFullYear(),
      month: date2.getMonth() + 1,
      day: date2.getDate(),
    }
  },

  /**
   * 日期格式转换
   */
  dateFormate: function (str, type) {
    let txt = 'YYYY-MM-DD'
    if (!str) {
      return ''
    }
    if (type) {
      txt = type
    }
    const m = moment(str).format(txt)
    return m
  },

  /**
   * 字段截取
   */
  cutStr: function (str, num) {
    if (!str) {
      return ''
    }

    let m = 10
    let n = str
    if (num) {
      m = num
    }
    if (str.length > m) {
      n = str.slice(0, m) + '...'
    }

    return n
  },

  // 传递消息
  broadcast: function (msg, data) {
    EventBus.$emit(msg, data)
  },

  // 接收消息
  received: function (msg, callBack) {
    EventBus.$off(msg)
    EventBus.$on(msg, function (row) {
      callBack(row)
    })
  },

  /**
   * 深克隆 所有原型链上的对象和属性
   * 例: const bar=deepClone(foo)
   * console.log(bar===foo) false
   * @param {*} obj
   */
  deepClone: function (obj) {
    // Handle the 3 simple types, and null or undefined or function
    if (obj == null || typeof obj !== 'object') return obj
    // Handle Date
    if (obj instanceof Date) {
      const copy = new Date()
      copy.setTime(obj.getTime())
      return copy
    }
    // Handle Array or Object
    if ((obj instanceof Array) | (obj instanceof Object)) {
      const copy = obj instanceof Array ? [] : {}
      for (var attr in obj) {
        if (obj.hasOwnProperty(attr)) {
          copy[attr] = Util.deepClone(obj[attr])
        }
      }
      return copy
    }
    throw new Error("Unable to clone obj! Its type isn't supported.")
  },

  // 取数据
  getStorage: function (key) {
    let o = sessionStorage.getItem(key)
    let m = o ? JSON.parse(o) : {}
    return m
  },

}

export const showModal = Util.msg
export const showToast = Util.Info
export const broadcast = Util.broadcast
export const received = Util.received
export const deepClone = Util.deepClone
export const getStorage = Util.getStorage

// 通过url下载文件
export const downPackFile = (options) => {
  if (!options) {
    return false;
  }
  let link = document.createElement("a");
  link.style.display = "none";
  link.href = options.url;
  link.setAttribute("download", options.name || "excel.xlsx");
  document.body.appendChild(link);
  link.click();
};
